package com.jd.finance.core.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jd.finance.core.pojo.entity.Loan;
import com.jd.finance.result.BaseResult;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;

/**
 * <p>
 * 贷款表 服务类
 * </p>
 *
 * @author LiQingBo
 * @since 2022-05-17
 */
public interface LoanService extends IService<Loan> {

    /**
     * 根据uid查询审核通过，待签约的产品
     *
     * @param uid
     * @return
     */
    BaseResult getExamPassed(@Param("uid") Integer uid);

    // 28接口
    // /**
    //  * 根据uid查询待还款产品
    //  *
    //  * @param uid
    //  * @return
    //  */
    // BaseResult getRepayProd(@Param("uid") Integer uid);

    /**
     * 查询贷款记录
     *
     * @param uid
     * @return
     */
    BaseResult selectLonInfo(@Param("uid") Integer uid);

    // 30 接口未定义
    // /**
    //  * 根据uid查询已逾期的产品
    //  * @param uid
    //  * @return
    //  */
    // BaseResult getOverdue(@Param("uid") Integer uid);
    /**
     * 根据uid查询已逾期的产品
     * @param uid
     * @return
     */
    /*BaseResult getOverdue(@Param("uid") Integer uid);*/


    /**
     * 查询平台交易额
     *
     * @return
     */
    BigDecimal findDealCount();

    /**
     * 查询平台交易人数
     *
     * @return
     */
    BaseResult getTradeUserCount();

    /**
     * 获取各省份全年贷款总金额
     *
     * @param uid
     * @return
     */
    BaseResult getCityYearSumMoney(@Param("uid") Integer uid);

    /**
     * 查询年度流水按月
     *
     * @param uid     登录管理员id
     * @param request
     * @return 每个月份流水
     */
    BaseResult getRunWater(@Param("uid") Integer uid, @Param("request") HttpServletRequest request);

    /**
     * 根据uid查询当月业绩总额
     *
     * @param gmId 总经理id
     * @param uid  工作人员id
     * @return
     */
    BaseResult getSumKpiMonth(@Param("gmId") Integer gmId, @Param("uid") Integer uid);

    /**
     * 根据uid获取当年业绩汇总
     *
     * @param gmId 总经理id
     * @param uid  信贷员id
     * @return
     */
    BaseResult getSumKpiYear(Integer gmId, Integer uid);

    /**
     * 总经理查询 当年业绩前三名
     *
     * @param uid 总经理id
     * @return
     */
    BaseResult getKpiYearTopThree(Integer uid);

    /**
     * 根据银行id及月份，查询成交的产品信息
     *
     * @param uid    总经理id
     * @param bid    银行id
     * @param monthT 月份
     * @return
     */
    BaseResult getTradeInfo(@Param("uid") Integer uid, @Param("bid") Integer bid, @Param("monthT") Integer monthT);


    /**
     * 进行中的贷款列表（分页，每页6条）
     *
     * @param page
     * @param limit
     * @param uid
     * @return
     */
    BaseResult getTradingLoanList(@Param("page") Long page, @Param("limit") Long limit, @Param("uid") Integer uid);

    /**
     * 根据银行id，获取同一个银行所有信贷员列表（不分页，根据业绩正序排序）
     *
     * @param bid 银行id
     * @return 返回信贷员列表
     */
    BaseResult getLoanOfficerInfo(@Param("bid") Integer bid);

    /**
     * 重新申请贷款，就在之前的贷款申请数据上修改，更新基本字段，审核字段清空，返回是否成功
     *
     * @param lid        贷款申请id
     * @param uid        贷款人id
     * @param bcId       卡号id
     * @param workId     工作人员id
     * @param proName    产品名
     * @param bankName   银行名称
     * @param loanReason 贷款原因
     * @param loanMoney  贷款金额
     * @param allDebt    整体负债
     * @return 修改结果
     */
    BaseResult secondLoanApply(@Param("lid") Integer lid, @Param("uid") Integer uid, @Param("bcId") Integer bcId,
                               @Param("workId") Integer workId, @Param("proName") String proName,
                               @Param("bankName") String bankName, @Param("loanReason") String loanReason,
                               @Param("loanMoney") BigDecimal loanMoney, @Param("allDebt") BigDecimal allDebt);
}
